#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"personnel.h"

void menu_personnel ()
{char i_d[100],name[100],first_name[100];
personnel p1;
char chemin[MAX];
int i;
strcpy(i_d,"0");

printf("1: enregistrer_personnel \n");
printf("2:liste_personnels \n");
printf("3:recherche d'un personnel par nom \n");
printf("4:recherche d'un personnel par date d'entree \n");
printf("5:afficher les medecins \n");
printf("6:afficher les infermiers  \n");
printf("7:afficher les personnels de securite \n");
printf("8:modifier statut d'un personnel \n");
printf("9:supprimer_personnel \n");
printf("taper autre chiffre pour quitter menu \n");



printf ("donner votre choix \n");
scanf("%d",&i);

switch (i){
case 1:ajout_personnel (p1) ;
menu_personnel();
break;
case 2:liste_personnels(p1);
menu_personnel();
break;
case 3:recherche_nom(name,first_name);
menu_personnel();
break;
case 4:recherche_date_entree_personnel();
menu_personnel();
break;
case 5:recherche_medic();
menu_personnel();
break;
case 6:recherche_nurse();
menu_personnel();
break;
case 7:recherche_security();
menu_personnel();
break;
case 8:modif_personnel();
menu_personnel();
break;
case 9:supprimer_personnel(&p1,i_d);
menu_personnel();
break;

default :

break;
}
}

void ajout_personnel(personnel p)
{
char id[100],name[100],first_name[100],gender[100],job[100],iden[100],state[100];

int old,year,day,month,test1,test2,a,biss;
long int carte;
a=rechercher_personnel(p,iden);
if (a) 
{printf("la personne existe deja dans la base de données \n");}
else {


char chemin[]="fichier_personnels.txt";
FILE *f;
f=fopen(chemin,"a");
if(f==NULL)
{
printf("\n Impossible d'ouvrir le fichier\n");
}

else
{
//id
strcpy(p.identifiant,iden);


//name
do{
printf(" donner le nom du personnel \n");
scanf("%s",name);
}while(strlen(name)>30);
strcpy(p.nom,name);
//prenom
do{
printf(" donner le prenom du personnel \n");
scanf("%s",first_name);
}while(strlen(first_name)>30);
strcpy(p.prenom,first_name);
//age
do{
printf(" donner l'age du personnel \n");
scanf("%d",&old);
}while(old<18||old>120);
p.age=old;
//cin
do{
printf(" donner cin du personnel \n");
scanf("%ld",&carte);
}while(carte<0);
p.cin=carte;
//sexe
do{
printf(" donner le sexe du personnel (m pour male et f pour feminin) \n");
scanf("%s",gender);
}while ((strcmp(gender,"m")!=0)&&(strcmp(gender,"f")!=0));
strcpy(p.sexe,gender);

//type
do{
printf(" donner travail du personnel(infermier ou medecin ou securite) \n");
scanf("%s",job);
}while ((strcmp(job,"infermier")!=0)&&(strcmp(job,"medecin")!=0)&&(strcmp(job,"securite")!=0));
strcpy(p.type,job);
//statut
do{
printf(" donner statut du personnel(retraite ou conge ou travail) \n");
scanf("%s",state);
}while ((strcmp(state,"retraite")!=0)&&(strcmp(state,"conge")!=0)&&(strcmp(state,"travail")!=0));
strcpy(p.statut,state);


//day,year,month
//year
do{
printf("donner l'annee associe \n");
scanf("%d",&year);
}while(year<1980||year>2050);
if (year%4==0) biss=1; else biss=0;
p.annee=year;
//month
do{
printf("donner  le mois associé \n");
scanf("%d",&month);
}while(month<=0||month>12);
p.mois=month;

//day
do{
printf("donner le jour d'entrée de la personne \n");
scanf("%d",&day);
if (month==1)
{test1=1;test2=31;}
else if (month==2)
{if (biss==1)

{test1=1;test2=29;}
else if (biss==0) {test1=1;test2=28;}}
else if (month==3)
{test1=1;test2=31;}
else if (month==4)
{test1=1;test2=30;}
else if (month==5)
{test1=1;test2=31;}
else if (month==6)
{test1=1;test2=30;}
else if (month==7)
{test1=1;test2=31;}
else if (month==8)
{test1=1;test2=31;}
else if (month==9)
{test1=1;test2=30;}
else if (month==10)
{test1=1;test2=31;}
else if (month==11)
{test1=1;test2=30;}
else if (month==12)
{test1=1;test2=31;}

}while(day<test1||day>test2);
p.jour=day;

fprintf(f,"%s %s %d %ld %s %s %s %d %d %d %s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);
}


fclose(f);
}
}








void liste_personnels(personnel p )
{
char chemin[]="fichier_personnels.txt";

FILE *f;


f=fopen(chemin,"r");
if(f==NULL){
printf("\nImpossible\n");
}else{
while( fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)
 != EOF)
{

printf("\n Nom : %s",p.nom);
printf("\n prenom : %s",p.prenom);
printf("\n age : %d",p.age);
printf("\n cin : %ld",p.cin);
printf("\n sexe : %s",p.sexe);
printf("\n l'identifiant du personnel : %s",p.identifiant);
printf("\n le type du personnel : %s",p.type);
printf("\n le statut du personnel : %s",p.statut);
printf("\n le jour d'entrée: %d",p.jour);
printf("\n le mois d'entrée: %d",p.mois);
printf("\n l'année d'entrée: %d\n",p.annee);
}
}
fclose(f);
}


int rechercher_personnel(personnel p,char iden[100])
{
char chemin[]="fichier_personnels.txt";
FILE *f;
int t=0;
char id[100];

f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{
do{
printf("\nsaisir id\n");
scanf("%s",id);
 }while (strlen(id)>30);
while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if(strcmp(id,p.identifiant)==0){
t=1;
printf ("\n%s %s %d %ld %s %s %s %d %d %d %s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);
break;
}
}
if(t==0){printf("\n id inexistant dans la base de donnees\n");strcpy(iden,id);}


fclose(f);
return(t);
}
}


void supprimer_personnel (personnel *p,char i_d[100])
{int a,t;
char id[100];
FILE *f1,*f2;
char chemin[]="fichier_personnels.txt";
char temp[]="temp.txt";


f1=fopen(chemin,"r");
f2=fopen(temp,"w");
if(f1==NULL||f2==NULL)
printf("\n Impossible d'ouvrir le fichier \n");

else{
t=0;
if (strcmp(i_d,"0")==0)
{printf("\ndonner id\n");
scanf("%s",id);}
else strcpy(id,i_d);
rewind(f1);


while(fscanf(f1,"%s %s %d %ld %s %s %s %d %d %d %s",p->nom,p->prenom,&p->age,&p->cin,p->sexe,p->identifiant,p->type,&p->jour,&p->mois,&p->annee,p->statut)!=EOF ){
 if(strcmp(p->identifiant,id)==0){
t=1 ;printf("\ndone!\n");

break;}
}

if (t!=1)
printf("identifiant inexistant dans la base de donnees \n");

rewind(f1);

while (fscanf(f1,"%s %s %d %ld %s %s %s %d %d %d %s",p->nom,p->prenom,&p->age,&p->cin,p->sexe,p->identifiant,p->type,&p->jour,&p->mois,&p->annee,p->statut)!=EOF ){

    if (strcmp(p->identifiant,id) != 0)
   fprintf (f2,"%s %s %d %ld %s %s %s %d %d %d %s\n",p->nom,p->prenom,p->age,p->cin,p->sexe,p->identifiant,p->type,p->jour,p->mois,p->annee,p->statut);
}
fclose(f1);
fclose(f2);
remove(chemin);
rename(temp,chemin);


}
}

int recherche_nom(char name[100],char first_name[100])
{personnel p;
int t;
char chemin[]="fichier_personnels.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{

printf("\nsaisir nom\n");
scanf("%s",name);
printf("\nsaisir prenom\n");
scanf("%s",first_name); 

while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s\n",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if((strcmp(name,p.nom)==0) && (strcmp(first_name,p.prenom)==0)){

printf ("\nnom:%s \nprenom:%s \nage:%d \ncin:%ld \nsexe:%s \nidentifiant:%s \ntype:%s \njour:%d \nmois:%d \nannee:%d \nstatut:%s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);t=1;}

}}
fclose(f);
if (t==0) 
printf("nom et/ou prenom inexistant dans la base de donnees\n");
return(t);
}//end


void modif_personnel()

{//o1
char leave[100],state[100],name[100],first_name[100],i_d[100];
personnel p1,p;
int t,choix;
FILE *f;
char chemin[]="fichier_personnels.txt";
t=recherche_nom(name,first_name);


if (t==1)
{//o2


f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{//o3
while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{//O4w

if((strcmp(name,p.nom)==0) && (strcmp(first_name,p.prenom)==0)){//o5
strcpy(p1.nom,p.nom);
strcpy(p1.prenom,p.prenom);
strcpy(p1.type,p.type);
p1.age=p.age;
p1.cin=p.cin;
strcpy(p1.sexe,p.sexe);
strcpy(p1.identifiant,p.identifiant);
printf("test identifiant %s \n",p1.identifiant);
p1.jour=p.jour;
p1.mois=p.mois;
p1.annee=p.annee;
printf("voulez vous changer le statut du personnel(1),quitter(autre chiffre) \n");
scanf("%d",&choix);
switch (choix){//o6
case 1:
do{
printf(" donner le statut du personnel(retraite ou conge ou travail) \n");
scanf("%s",state);
}while ((strcmp(state,"retraite")!=0)&&(strcmp(state,"conge")!=0)&&(strcmp(state,"travail")!=0));
strcpy(p1.statut,state);

fclose(f);
supprimer_personnel (&p,p1.identifiant);
f=fopen(chemin,"a");
if(f==NULL)

printf("\n Impossible d'ouvrir le fichier\n");


else
{fprintf(f,"%s %s %d %ld %s %s %s %d %d %d %s \n",p1.nom,p1.prenom,p1.age,p1.cin,p1.sexe,p1.identifiant,p1.type,p1.jour,p1.mois,p1.annee,p1.statut);
fclose(f);}
break;
default:printf("vous avez choisi de quitter \n");fclose(f);
}//c6
}//c5
}//c4

}//c3
}//c2
}//c1


void recherche_medic()
{personnel p;
int t;
char chemin[]="fichier_personnels.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{


while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if((strcmp("medecin",p.type)==0) ){

printf ("\nnom:%s prenom:%s age:%d cin:%ld sexe:%s identifiant:%s type:%s jour:%d mois:%d annee:%d statut:%s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);t=1;}

}}
fclose(f);
if (t==0) 
printf("pas de medecin enregistre dans la base de donnees\n");

}//end

void recherche_nurse()
{personnel p;
int t;
char chemin[]="fichier_personnels.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{


while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if((strcmp("infermier",p.type)==0) ){

printf ("\nnom:%s prenom:%s age:%d cin:%ld sexe:%s identifiant:%s type:%s jour:%d mois:%d annee:%d statut:%s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);t=1;}

}}
fclose(f);
if (t==0) 
printf("pas d'infermier enregistre dans la base de donnees\n");

}//end

void recherche_security()
{personnel p;
int t;
char chemin[]="fichier_personnels.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{


while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if((strcmp("securite",p.type)==0) ){

printf ("\nnom:%s prenom:%s age:%d cin:%ld sexe:%s identifiant:%s type:%s jour:%d mois:%d annee:%d statut:%s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);t=1;}

}}
fclose(f);
if (t==0) 
printf("inexistance de personnel de securite dans la base de donnees\n");

}//end

int rechercher1_personnel(personnel p,char id[])
{

char chemin[]="fichier_personnels.txt";
FILE *f;
int t=0;


f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{

while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if(strcmp(id,p.identifiant)==0){
t=1;
printf ("\nnom:%s \nprenom:%s \nage:%d \ncin:%ld \nsexe:%s \nidentifiant:%s \ntype:%s \njour:%d \nmois:%d \nannee:%d \nstatut:%s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);
break;
}
}




fclose(f);
return(t);
}
}


void recherche_date_entree_personnel()
{personnel p;
int t,day,month,year;
char chemin[]="fichier_personnels.txt";
FILE *f;
t=0;
f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{
do {
printf("\nsaisir jour d'entree\n");
scanf("%d",&day);
}while (day<1||day>31);
do {
printf("\nsaisir mois d'entree\n");
scanf("%d",&month);
}while (month<1||month>12);
do {
printf("\nsaisir annee d'entree\n");
scanf("%d",&year);
}while (year<1980||year>2050);
while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if(year==p.annee && month==p.mois && day==p.jour ){

printf ("\nnom:%s \nprenom:%s \nage%d \ncin:%ld \nsexe:%s \nidentifiant:%s \ntype:%s \njour:%d \nmois%d \nannee%d \nstatut:%s\n",p.nom,p.prenom,p.age,p.cin,p.sexe,p.identifiant,p.type,p.jour,p.mois,p.annee,p.statut);t=1;}

}}
fclose(f);
if (t==0) 
printf("date d'entree inexistante\n");

}//end

int rechercher0_personnel(personnel p,char id[])
{

char chemin[]="fichier_personnels.txt";
FILE *f;
int t=0;


f=fopen(chemin,"r");
if (f==NULL) printf("\nimpossible\n");
else{

while(fscanf(f,"%s %s %d %ld %s %s %s %d %d %d %s",p.nom,p.prenom,&p.age,&p.cin,p.sexe,p.identifiant,p.type,&p.jour,&p.mois,&p.annee,p.statut)!=EOF  )
{

if(strcmp(id,p.identifiant)==0){
t=1;

break;
}
}




fclose(f);
return(t);
}
}







	
